#!/bin/bash
# script name: 失败登录监视脚本
# author: subushi
# update date: 2023.09.16

while true; do
    # 使用 lastb 命令获取连接失败的记录，并使用 awk 过滤 IP 地址
    failed_ips=$(lastb | awk '{print $3}' | sort | uniq -c | awk '$1 > 5 {print $2}')

    # 如果有失败的IP地址，将其添加到 /etc/hosts.deny
    if [ -n "$failed_ips" ]; then
        for ip in $failed_ips; do
            # 检查 IP 是否已经存在于 hosts.deny 中
            if ! grep -q "$ip" /etc/hosts.deny; then
                echo "sshd: $ip" >> /etc/hosts.deny
            fi
        done

        # 重启 SSH 服务
        systemctl restart sshd
    fi

    # 等待5秒后再次检查
    sleep 5
done
